// middleware/auth.js
import jwt from "jsonwebtoken";

const JWT_SECRET = "your-secret-key-here"; // 应与登录时使用的密钥相同

// 验证令牌
export function authenticateToken(req, res, next) {
  const authHeader = req.headers["authorization"];
  const token = authHeader && authHeader.split(" ")[1];

  if (!token) {
    return res.status(401).json({ error: "Authentication token missing" });
  }

  jwt.verify(token, JWT_SECRET, (err, user) => {
    if (err) {
      return res.status(403).json({ error: "Invalid token" });
    }

    // 将用户信息添加到请求对象中，供后续路由使用
    req.user = user;
    next();
  });
}

// 可选认证（允许未登录用户访问）
export function optionalAuthenticateToken(req, res, next) {
  const authHeader = req.headers["authorization"];
  const token = authHeader && authHeader.split(" ")[1];

  if (!token) {
    return next(); // 没有令牌，继续执行但不设置用户信息
  }

  jwt.verify(token, JWT_SECRET, (err, user) => {
    if (err) {
      return next(); // 令牌无效，继续执行但不设置用户信息
    }

    req.user = user;
    next();
  });
}
